#继承就是对旧的类修修改改，以成为新的类
#------------------------单继承
#父类
class Phone:
    name = None
    producer = None

    def communicate(self):
        print("通过4g通话")
#子类
class Phone2022(Phone):
    face_id = 10001

    def communicate_new(self):
        print("通过5g通话")

# 创建Phone2022类的实例  
phone = Phone2022()  
  
# 调用继承自父类的方法  
phone.communicate()  
  
# 打印子类的属性  
print(f"{phone.face_id}")  
  
# 调用子类自己的方法，注意加上括号  
phone.communicate_new()

#--------------------------多继承
class Phone:
    id = 10001

    def communicate(self):
        print("小米12Pro可以打电话")

class NFCreder:
    function = "读卡"
    id = 10002

    def read(self):
        print("NFC可以读卡")
    def write(self):
        print("NFC可以写卡")

class Remote_Control:
    function = "红外遥控"

    def control(self):
        print("可以实现红外遥控")

class MyPhone(Phone, NFCreder, Remote_Control):     
    #从左到右优先级降低，如果不同的子类中有相同的名字的成员方法和变量
    #在父类中调用成员变量和方法，会优先调用最左边的子类中的成员
                                                    
    pass#------------表示空

myphone = MyPhone()
myphone.communicate()
myphone.read()
myphone.write()
myphone.control()
print(f"{myphone.id}")


#重写父类方法，直接在子类中定义相同的成员变量和成员方法，重新写就行了
#如果要使用父类中的方法和变量，直接使用super关键字就行
#父类的方法和变量一般是在子类中使用super和父类名.调用的，因为如果需要在外面调用父类中的东西
#直接创建一个父类的对象就行了
class student:
    name = "邓玉书"
    age = 18

    def kaoyan(self):
        print("I am studying hard")

class graduate_student(student):            #在类中只能定义成员方法和成员变量，不能干其他的
    name = "邓玉书"
    age = 21
    def kaoyan(self):
        print(f"我现在{self.age}岁了， 在父类中我{super().age}岁")
        super().kaoyan()
        print("春风得意马蹄疾，一日看尽长安花")


stu = graduate_student()
stu.kaoyan()

# def func(c : str)-> int:#           变量注解：在冒号后面加上变量类型
#                                     #返回值注解：在->就后面叫上变量类型
#     return 3939

# print(f"{func("dsaj")}")
